/**
 * 
 * @param {void} 要控制的函数 
 * @param {number} 时间: 毫秒
 * @returns 
 */
export const throttle = function(fn,delay){
  // 记录起始时间
  let start = 0

  return function() {
    // 注意此处this指向 函数调用者
    let context = this
    let args = arguments
    let now = new Date().getTime()
    if (now - start > delay){
      // fn需要绑定上层函数this  否则默认为window调用
      fn.apply(context,args)
      // 重置起始时间
      start = new Date().getTime()
    }
  }
}


export const debouncing = function(fn,delay) {
  let timeId
  return function(){
    // 注意此处this指向 函数调用者
    let context = this // 保存当前作用域
    let args = arguments // 保存参数

    timeId && clearTimeout(timeId)
    let tag = !timeId
    timeId = setTimeout(() => {
      timeId = null
    },delay)
    // fn需要绑定上层函数this  否则默认为window调用
    tag && fn.apply(context,args) // fn调用时使用调用函数的this和参数arguments
  }
}
